home
***
CD-ROM
|
disk
|
FTP
|
other
***
search
/
MacHack 1996
/
MacHack 1996.toast
/
Hacks
/
Hacks ’95
/
Is Native
/
My68KGet1Rsrc.c
< prev
next >
Wrap
C/C++ Source or Header
|
1995-06-24
|
2KB
|
88 lines
//
// File: My68KGet1Rsrc.c
// Project: IsNative.π
// Author: Glenn L. Austin
// Symantec Corporation
//
#include "IsNative.h"
static Boolean inCheckRsrc = false;
void CheckRsrc(Handle rsrc, short id, ResType rType)
{
if (inCheckRsrc) // I end up calling myself, so don't do anything if so...
return;
if (!rsrc)
return; // if there isn't the resource, go ahead and return immediately
if ((*(Byte*) LMGetCurApName() < 32) && (!id && ((rType == 'cfrg') || (rType == 'CODE'))) &&
!FindAppInfo(LMGetCurApName()))
{
THz cZone = GetZone();
MyAppInfo appInfo;
Handle h;
short oldResLoad;
BlockMove(LMGetCurApName(), &appInfo.appName, sizeof(Str31));
appInfo.flags = 0;
if (rType == 'cfrg')
{
appInfo.flags |= kIsNative;
oldResLoad = LMGetResLoad();
SetResLoad(false);
inCheckRsrc = true;
h = Get1Resource('CODE', 0); // check for 68K code...
inCheckRsrc = false;
LMSetResLoad(oldResLoad);
if (appInfo.flags && h)
appInfo.flags |= kHas68K;
}
SetZone(SystemZone());
PtrAndHand((Ptr) &appInfo, (Handle) glob->appInfo, sizeof(MyAppInfo));
SetZone(cZone);
}
}
void MyGet1Resource(void)
{
asm {
Link A6,#-12 ; stack frame looks like: A6.L, (4)retAddr.L, (8)id.W, (10)type.L
Movem.L D0/A0,-8(A6)
Jsr SetA4World
Move.L D0,-12(A6)
Clr.L -(SP)
Move.L 10(A6),-(SP)
Move 8(A6),-(SP)
Pea @1
Move.L glob,A0
Move.L OFFSET(MyGlobals,oldG1RTrap)(A0),-(SP)
Movem.L -8(A6),D0/A0
Move.L -12(A6),A4
Move.L (A6),A6 ; clean up A6
Rts ; on return, stack looks like: handle.L, oldA4.L, D0.L, A1.L, A6.L
@1 Lea 8+8(SP),A6
Move.L (SP)+,14(A6)
Movem.L D0-D2/A0-A1,-(SP)
Jsr SetA4World
Move.L 10(A6),-(SP)
Move 8(A6),-(SP)
Move.L 14(A6),-(SP)
Bsr CheckRsrc
Lea 10(SP),SP
Movem.L (SP)+,D0-D2/A0-A1
Move.L -12(A6),A4
Unlk A6
Move.L (SP)+,2(SP) ; I could use RTD #6, if it only existed on the 68000...
Addq #2,SP
}
}